package org.microframework.base.core.security.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 安全配置属性
 */
@ConfigurationProperties(prefix = "micro.security")
public class SecurityProperties {
    
    /**
     * 全局拦截器配置
     */
    private GlobalInterceptor globalInterceptor = new GlobalInterceptor();
    
    /**
     * 安全拦截器配置
     */
    private Interceptor interceptor = new Interceptor();
    
    /**
     * 获取全局拦截器配置
     */
    public GlobalInterceptor getGlobalInterceptor() {
        return globalInterceptor;
    }
    
    /**
     * 设置全局拦截器配置
     */
    public void setGlobalInterceptor(GlobalInterceptor globalInterceptor) {
        this.globalInterceptor = globalInterceptor;
    }
    
    /**
     * 获取安全拦截器配置
     */
    public Interceptor getInterceptor() {
        return interceptor;
    }
    
    /**
     * 设置安全拦截器配置
     */
    public void setInterceptor(Interceptor interceptor) {
        this.interceptor = interceptor;
    }
    
    /**
     * 全局拦截器配置
     */
    public static class GlobalInterceptor {
        /**
         * 是否启用全局拦截器，默认为true
         */
        private boolean enabled = true;
        
        /**
         * 拦截器优先级，值越小优先级越高，默认为Ordered.HIGHEST_PRECEDENCE + 100
         */
        private int order = Integer.MIN_VALUE + 100;
        
        /**
         * 是否输出调试日志，默认为false
         */
        private boolean debug = false;
        
        /**
         * 是否添加安全响应头，默认为true
         */
        private boolean addSecurityHeaders = true;
        
        /**
         * 是否监控慢请求，默认为true
         */
        private boolean monitorSlowRequests = true;
        
        /**
         * 慢请求阈值（毫秒），默认为1000ms
         */
        private long slowRequestThreshold = 1000;
        
        /**
         * 排除路径
         */
        private String[] excludePatterns = {};
        
        /**
         * 获取是否启用全局拦截器
         */
        public boolean isEnabled() {
            return enabled;
        }
        
        /**
         * 设置是否启用全局拦截器
         */
        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }
        
        /**
         * 获取拦截器优先级
         */
        public int getOrder() {
            return order;
        }
        
        /**
         * 设置拦截器优先级
         */
        public void setOrder(int order) {
            this.order = order;
        }
        
        /**
         * 获取是否输出调试日志
         */
        public boolean isDebug() {
            return debug;
        }
        
        /**
         * 设置是否输出调试日志
         */
        public void setDebug(boolean debug) {
            this.debug = debug;
        }
        
        /**
         * 获取是否添加安全响应头
         */
        public boolean isAddSecurityHeaders() {
            return addSecurityHeaders;
        }
        
        /**
         * 设置是否添加安全响应头
         */
        public void setAddSecurityHeaders(boolean addSecurityHeaders) {
            this.addSecurityHeaders = addSecurityHeaders;
        }
        
        /**
         * 获取是否监控慢请求
         */
        public boolean isMonitorSlowRequests() {
            return monitorSlowRequests;
        }
        
        /**
         * 设置是否监控慢请求
         */
        public void setMonitorSlowRequests(boolean monitorSlowRequests) {
            this.monitorSlowRequests = monitorSlowRequests;
        }
        
        /**
         * 获取慢请求阈值
         */
        public long getSlowRequestThreshold() {
            return slowRequestThreshold;
        }
        
        /**
         * 设置慢请求阈值
         */
        public void setSlowRequestThreshold(long slowRequestThreshold) {
            this.slowRequestThreshold = slowRequestThreshold;
        }
        
        /**
         * 获取排除路径
         */
        public String[] getExcludePatterns() {
            return excludePatterns;
        }
        
        /**
         * 设置排除路径
         */
        public void setExcludePatterns(String[] excludePatterns) {
            this.excludePatterns = excludePatterns;
        }
    }
    
    /**
     * 安全拦截器配置
     */
    public static class Interceptor {
        /**
         * 是否启用安全拦截器，默认为false
         */
        private boolean enabled = false;
        
        /**
         * 是否强制要求登录，默认为true
         */
        private boolean requiresLogin = true;
        
        /**
         * 是否启用权限检查，默认为false
         */
        private boolean enablePermissionCheck = false;
        
        /**
         * 权限前缀，用于构建权限标识
         */
        private String permissionPrefix = "";
        
        /**
         * 拦截器优先级，值越小优先级越高
         */
        private int order = Integer.MIN_VALUE + 200;
        
        /**
         * 排除路径
         */
        private String[] excludePatterns = {};
        
        /**
         * 获取是否启用安全拦截器
         */
        public boolean isEnabled() {
            return enabled;
        }
        
        /**
         * 设置是否启用安全拦截器
         */
        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }
        
        /**
         * 获取是否强制要求登录
         */
        public boolean isRequiresLogin() {
            return requiresLogin;
        }
        
        /**
         * 设置是否强制要求登录
         */
        public void setRequiresLogin(boolean requiresLogin) {
            this.requiresLogin = requiresLogin;
        }
        
        /**
         * 获取是否启用权限检查
         */
        public boolean isEnablePermissionCheck() {
            return enablePermissionCheck;
        }
        
        /**
         * 设置是否启用权限检查
         */
        public void setEnablePermissionCheck(boolean enablePermissionCheck) {
            this.enablePermissionCheck = enablePermissionCheck;
        }
        
        /**
         * 获取权限前缀
         */
        public String getPermissionPrefix() {
            return permissionPrefix;
        }
        
        /**
         * 设置权限前缀
         */
        public void setPermissionPrefix(String permissionPrefix) {
            this.permissionPrefix = permissionPrefix;
        }
        
        /**
         * 获取拦截器优先级
         */
        public int getOrder() {
            return order;
        }
        
        /**
         * 设置拦截器优先级
         */
        public void setOrder(int order) {
            this.order = order;
        }
        
        /**
         * 获取排除路径
         */
        public String[] getExcludePatterns() {
            return excludePatterns;
        }
        
        /**
         * 设置排除路径
         */
        public void setExcludePatterns(String[] excludePatterns) {
            this.excludePatterns = excludePatterns;
        }
    }
} 